import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:get/get.dart';
import 'package:shimo_app/pages/components/confirmdDialog.dart';
import 'package:shimo_app/pages/setting_component/controller.dart';
import 'package:shimo_app/services/device_service.dart';
import 'package:window_manager/window_manager.dart';

import '../components/hint.dart';
import '../sample_page/sample_view.dart';
import 'index_controller.dart';

/// 应用主页面 - 包含顶部导航和主要内容区域
class IndexPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // 获取页面控制器和状态
    final controller = Get.find<IndexController>();
    final state = Get.find<IndexController>().state;

    // 使用GetBuilder构建响应式UI，当控制器状态变化时自动重建
    return GetBuilder<IndexController>(builder: (controller) {
      return Scaffold(
        // 防止底部导航栏被键盘顶起
        resizeToAvoidBottomInset: false,

        // 页面主体内容
        body: Container(
          // 删除固定高度计算，让内容充满整个屏幕
          // 这样页面内容会占据原来底部导航栏的区域
          width: MediaQuery.of(context).size.width, // 容器宽度为屏幕宽度

          // 添加顶部内边距
          child: Padding(
            padding: const EdgeInsets.only(top: 4.0),
            child: controller.inited
                ? Column(
                    // 应用已初始化：显示正常内容
                    children: [
                      // 顶部信息栏 - 保持原有高度
                      Container(
                        height: 60, // 固定高度，避免挤压内容区域
                        child: Padding(
                          padding: const EdgeInsets.only(left: 40, bottom: 4),
                          child: Row(
                            children: [
                              // 左侧：页面选择下拉菜单
                              Container(
                                decoration: BoxDecoration(
                                  border: Border.all(
                                    color: Colors.grey.withOpacity(0.5),
                                    width: 1,
                                  ),
                                  borderRadius: BorderRadius.circular(4),
                                ),
                                child: Row(
                                  children: [
                                    // 当前页面显示
                                    Padding(
                                      padding: const EdgeInsets.symmetric(
                                          horizontal: 12, vertical: 8),
                                      child: Text(
                                        _getCurrentPageName(controller),
                                        style: TextStyle(
                                          fontSize: 16,
                                          fontWeight: FontWeight.w500,
                                        ),
                                      ),
                                    ),
                                    // 下拉按钮
                                    PopupMenuButton<int>(
                                      offset: Offset(0, 40),
                                      onSelected: (value) {
                                        // 点击导航项时切换页面
                                        controller.changePage(value);
                                      },
                                      itemBuilder: (BuildContext context) {
                                        return controller.pages
                                            .asMap()
                                            .entries
                                            .map((entry) {
                                          final index = entry.key;
                                          final page = entry.value;
                                          final item = page["item"]
                                              as BottomNavigationBarItem;
                                          return PopupMenuItem<int>(
                                            value: index,
                                            child: Row(
                                              children: [
                                                // 图标
                                                if (item.icon != null) ...[
                                                  item.icon!,
                                                  SizedBox(width: 8),
                                                ],
                                                // 标题 - 修复：使用 label 而不是 title
                                                Text(
                                                  _getPageLabel(item),
                                                  style: TextStyle(
                                                    fontSize: 14,
                                                  ),
                                                ),
                                              ],
                                            ),
                                          );
                                        }).toList();
                                      },
                                      child: Padding(
                                        padding: const EdgeInsets.symmetric(
                                            horizontal: 8, vertical: 8),
                                        child: Icon(
                                          Icons.arrow_drop_down,
                                          color: Colors.grey,
                                        ),
                                      ),
                                    ),
                                  ],
                                ),
                              ),

                              // 中间间距
                              SizedBox(width: 400),

                              // 右侧：用户信息和版本信息
                              if (controller.currentUser == null)
                                // 未登录状态显示
                                Text("未登录",
                                    style: TextStyle(
                                      fontSize: 16,
                                    ))
                              else
                                // 已登录状态显示用户信息
                                Row(
                                  children: [
                                    // 用户名称标签
                                    Text("名称：",
                                        style: TextStyle(
                                          fontSize: 16,
                                        )),
                                    // 用户名称值（加粗显示）
                                    Text(
                                      controller.currentUser!.name,
                                      style: TextStyle(
                                          fontSize: 16,
                                          fontWeight: FontWeight.bold),
                                    ),

                                    // 权限标签
                                    Text("   权限：",
                                        style: TextStyle(
                                          fontSize: 16,
                                        )),
                                    // 权限值（根据枚举显示对应中文，加粗显示）
                                    Text(
                                      {
                                            UserPrivilege.userTop: "顶级",
                                            UserPrivilege.userSuperAdmin:
                                                "超级管理员",
                                            UserPrivilege.userAdmin: "管理员",
                                            UserPrivilege.userExecutor: "操作员",
                                          }[controller
                                              .currentUser!.privilege] ??
                                          '未知权限',
                                      style: const TextStyle(
                                        fontSize: 16,
                                        fontWeight: FontWeight.bold,
                                      ),
                                    ),

                                    // 退出按钮
                                    TextButton(
                                        onPressed: () async {
                                          // 显示确认对话框，确认是否退出
                                          if (!await showConfirmDialog(
                                              "确定退出?")) {
                                            return; // 用户取消退出
                                          }
                                          // 执行退出登录操作
                                          controller.logout();
                                          // 显示退出成功提示
                                          showHint("退出成功", HintType.SUCCESS);
                                        },
                                        child: Text(
                                          "退出",
                                          style: TextStyle(
                                              decoration: TextDecoration
                                                  .underline), // 添加下划线样式
                                        )),
                                  ],
                                ),

                              // 右侧间距和应用版本信息
                              Expanded(
                                child: Row(
                                  mainAxisAlignment: MainAxisAlignment.end,
                                  children: [
                                    // 应用版本信息
                                    Text(
                                      "应用版本: v${controller.appVersion}",
                                      style: TextStyle(
                                          color: const Color.fromARGB(
                                              255, 15, 15, 15),
                                          fontSize: 16),
                                    ),
                                  ],
                                ),
                              ),
                              SizedBox(width: 130),
                            ],
                          ),
                        ),
                      ),

                      // 当前选中的页面内容 - 使用 Expanded 占据剩余所有空间
                      // 这样页面内容会扩展到原来底部导航栏的区域
                      Expanded(
                        child: Container(
                          // 可以添加一些装饰或边距
                          margin: EdgeInsets.only(top: 8), // 顶部添加一点间距
                          child: controller.currentPage(),
                        ),
                      ),
                    ],
                  )
                : // 应用未初始化：显示加载中状态
                Center(
                    child: Text("加载中..."),
                  ),
          ),
        ),
      );
    });
  }

  // 获取当前页面名称
  String _getCurrentPageName(IndexController controller) {
    if (controller.pages.isNotEmpty &&
        controller.currentPageIndex < controller.pages.length) {
      final page = controller.pages[controller.currentPageIndex];
      final item = page["item"] as BottomNavigationBarItem;
      return _getPageLabel(item);
    }
    return "主界面";
  }

  // 从BottomNavigationBarItem中提取页面标签 - 修复：使用 label 而不是 title
  String _getPageLabel(BottomNavigationBarItem item) {
    // 优先使用 label 属性
    if (item.label != null) {
      return item.label!;
    }

    // 如果 label 为空，尝试从其他方式获取
    // 注意：在较新的 Flutter 版本中，BottomNavigationBarItem 应该使用 label
    return "页面";
  }
}
